解析の基礎/演習1
三日目の今日は簡単な演習を行うが、ここでの目的は Ollydbg の使い方に慣れることだ。
使い方を知っているみじんこはさっさと 多重起動1へ行って来い。
さて、残ったみじんこたちよ、演習に使うプログラムはこれだ
ダウンロードが完了したら Ollydbg で開いてみろ。「ファイル」⇒「開く」そのままだ。
開いたら F9 を押して処理を進めるんだ。First という文字が表示されるポップアップが出てきただろう。次は「ok」を押せ。
プログラムは終了したか?そしたら再読み込みをさせるんだ。再読み込みは Ctrl+ F2 だ!
いいか、今操作した ファイル(プログラム)を開き F9 で実行、再度読み込みなおすには Ctrl + F2 という動作は基本中の基本だ。
F9 はブレークポイントを設定していない限りノンストップでプログラムを実行させる。Ctrl + F2 はプログラムの再読み込みだ。忘れるなよ。
それでは Ollydbg の基本的な使い方の説明を始める。
まず解析の基本となるのはトレースだ。大別して一般的に3つのトレース方法がある。
1.実行
2.ステップ実行
3.詳細ステップ実行
1.の「実行」は先ほどやった F9 の処理だ。
次にある 2.の「ステップ実行」は F8 で行う処理だ。とりあえず F8 を5回押してみろ。
もうわかったと思うが、F8 は自分でひとつずつ処理を進めていく場合に使う方法だ。解析にあたり一番多く使うのが F8 だろう。
3.の「詳細ステップ実行」を説明する前に Ollydbg の画面を見てみろ。
おそらく MessageBoxA というところで処理がとまっているはずだ。
00401014 . E8 E71F0000 CALL ; \MessageBoxA
MessageBox というのは一般的に API と呼ばれている。API とはプログラムを作るにあたり
簡単にプログラミング出来るように機能をまとめたものの総称だ。 その中のひとつとして MessageBox という関数(機能)があるわけだ。
Windows におけるプログラムの大部分はこの API という機能を用いて作られている。
さて、F8 で5回処理を進めたことにより First という文字がポップアップ上に表示されているはずだ。一度 ok を押し Ctrl + F2 で
プログラムを読み込みなおせ。次に重要な ブレークポイントの使い方を教えてやる。
ブレークポイント はプログラムを任意の場所で停止させるために使用する。なぁに、難しいことはない。
デバッグ画面の MessageBox のところをクリックし、F2 を押してみろ。左側のアドレス欄に赤い印がついただろう。
それが ブレークポイント を設定した印だ。
ブレークポイント は F9 で処理をいっきに進めたい時に効果を発揮する。とりあえず F9 でプログラムを実行してみろ、
見事ブレークポイントを設定した場所で処理がとまったはずだ。
ブレークポイントを解除するときは同じ場所で F2 を押せばいい。ちなみに何個でもブレークポイントをおけるが、
設定しすぎると分からなくなってしまうことがある。設定した ブレークポイントの一覧を見るには ALT + B だ。
これも覚えておけ。
話が少々飛んでいるが3.の「詳細ステップ実行」についてだ。
おっと、MessageBox につけたブレークポイント は外しておけよ。 変わりに MessageBox の下の xor eax, eax というところに
ブレークポイント を設定しておくんだ。
00401019 . 31C0 XOR EAX,EAX
例によって再読み込みをし、今度は F7 で処理を進めてみようか。F8 の時は5回押すと MessageBox が呼ばれたが F7 を5回やると・・・
はて、>MessageBox が出てこない。なぜだろうか?
答えは簡単だ、今おまえが操るデバッガがいる場所は MessageBox API の内部の処理を追っている だからだ。
ひたすら F7 を押してみれば分かると思うが、一向に処理が終わらない。それと同時に思ったはずだ。
たかだかポップアップ画面だすのにこんな意味不明なことやってるのかよ・・・。
つまりこの手間を省くためにプログラマは API という便利なものを使っている。
また、すでにわかったと思うが F8 は MessageBox などの関数呼び出し(callやjmp)にあたっても内部処理までは追いかけない。
それに対して F7 は内部処理を追いかける。ということになる。
ちょっと整理をしておこう。今回の要点は以下の3つだ。
・プログラムを簡単に作るためにAPIが用いられる。API とは MessageBox などの便利な関数の総称である。
・プログラムの実行を指定した場所で停止させるにはブレークポイント(F2)を使う。
・プログラムのトレースには主に、実行(F9)、ステップ実行(F8)、詳細ステップ実行(F7)、の3つがある。
ふぅ〜・・・結構つかれるな。ちょっと休憩だ。
次は 演習2だ、休憩が終わった奴から席についておけ
|